題目:
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
給定兩個大小分別nums1為和的排序數組,傳回兩個排序數組的中位數。nums2mn
整體運轉時間複雜度應該是O(log (m+n))。
驟:
確保 nums1 是較短的數組:這樣我們可以將二分查找的範圍限制在較小的數組上,避免不必要的查找。
設置二分查找範圍:對 nums1 數組進行二分查找,並根據分割點來確定 nums2 的分割點。
檢查分割點條件:如果條件滿足,則可以根據總長度來返回中位數。如果不滿足條件,調整 partition1 的位置。
步驟詳細解析:
假設我們有兩個數組 nums1 和 nums2,長度分別為 m 和 n。
我們將對 nums1 進行二分查找,分割點設為 partition1,然後根據 partition1 計算 partition2:
partition2 = (m + n + 1) / 2 - partition1。
為了確保左邊部分的元素數量等於右邊部分,partition1 和 partition2 的選擇必須滿足以下條件:
maxLeft1 <= minRight2 和 maxLeft2 <= minRight1。
如果這些條件滿足,則表示我們找到了合適的分割點,這時就可以根據總長度來計算中位數:
如果總長度是奇數,則返回左邊部分的最大值。
如果總長度是偶數,則返回左邊部分的最大值和右邊部分的最小值的平均值。